Skip to content

类型声明文件

  • 导入一个没有类型定义的npm包
  • 导入一些非代码文件
  • 项目运行时动态注入了一些全局变量

以上三个场景导致TS报错,可以通过类型声明来解决:通过额外的类型声明文件 (.d.ts), 在核心代码文件以外去提供对类型的进一步补全

Fix problem 1

例如在ts项目中引入了树结构处理包 tree-tool, 我们想使用列表转树形结构的方法 fromList

  • 方法1. 安装 @type/xxx 的 npm 包
  • 方法2. 对于没有提供 type 包的类库,自己创建一个类型声明文件 tree-tool.d.ts
typescript
declare module 'tree-tool' {
	interface Config {
        id?: string,
        pid?: string,
        children?: string
    }
    
    export const fromList: <T>(list: T[], config?: Config) => T[]
}

如果需要使用其他的方法,继续在声明中追加定义

Fix problem 2

假设我们希望导入一个 .md 文件

typescript
// index.ts
import raw from './note.md';

const content = raw.replace('NOTE', `NOTE${new Date().getDay()}`);

// declare.d.ts
declare module '*.md' {
  const raw: string;
  export default raw;
}

Fix problem 3

显式的添加方法/属性到 Window 接口中, 利用同名接口合并的特性,我们可以重新声明一个Window接口

typescript
interface Window {
    userTracker: (...args: any[]) => Promise<void>;
}

window.userTracker("click")
2025( )
今日 8.33%
本周 42.86%
本月 48.39%
本年 4.11%
Powered by Snowinlu | Copyright © 2024- | MIT License